package com.whatech.mall.order.feignclient;

import com.whatech.mall.order.model.dto.userservice.UserDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * 调用用户服务的FeignClient。
 */
/*
    @FeignClient 的 fallback 和 fallbackFactory 都是用来做降级处理的，只能二选一。
    fallbackFactory 的功能强大一些，可以拿到异常信息等。
 */
@FeignClient(name = "user-service", fallback = UserServiceFeignClientFallback.class)
public interface UserServiceFeignClient {

    /**
     * 注意：请求参数使用 @PathVariable 时，必需指定“value”属性。
     */
    @GetMapping("/user/query/{id}")
    UserDTO findUserById(@PathVariable("id") Long id);

    /**
     * 模拟：GET请求参数为Bean时，Feign接口方法的参数需要加上 @SpringQueryMap 注解。
     */
    @GetMapping("/user/get")
    boolean getUser(@SpringQueryMap UserDTO userDTO);

}
